
import { isEmpty } from './index'

/**
 * 字数校验
 * max: 最大值
 * required: 是否必填
 */
const validString = (rule, value, callback) => {
    console.log('value', value);
    let max = typeof rule.max !== 'undefined' ? rule.max : 255
    let required = typeof rule.required !== 'undefined' ? rule.required : true
    let type = typeof rule.type !== 'undefined' ? rule.type : 'string'

    if (!isEmpty(value) && value.length > max) {
        return callback(new Error('输入值过长'))
    }
    // Emoji 过滤
    if (!isEmpty(value)) {
        let type = Object.prototype.toString.call(value)
        if (type === '[object String]') {
            let flag = /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(value)
            if (flag) {
                return callback(new Error('输入值含有非法字符，请重新输入'))
            }
        }
    }
    if (required) {
        if (isEmpty(value)) {
            return callback(new Error('请输入'))
        }
    }
    callback()
}

/**
 * 金额校验
 * limitMin: 最小值 默认0
 * limitMax: 最大值 默认100亿
 * equal: 最小值是否可以等于(用于是否可以等于0): 默认true(不可以等于0)
 */
const validateAmount = (rule, value, callback) => {
    let required = typeof rule.required !== 'undefined' ? rule.required : true
    let limitMin = typeof rule.limitMin !== 'undefined' ? rule.limit : 0
    let limitMax = typeof rule.limitMax !== 'undefined' ? rule.limit : 100e8
    let equal = typeof rule.equal !== 'undefined' ? rule.equal : true
    // 必填
    if (required && isEmpty(value)) {
        return callback(new Error('请输入'))
    }
    if (equal && value !== null && value !== undefined && value !== '' && value - 0 < limitMin) {
        return callback(new Error('不能小于等于' + limitMin))
    }
    if (!equal && value !== null && value !== undefined && value !== '' && value - 0 <= limitMin) {
        return callback(new Error('不能小等于' + limitMin))
    }
    if (isNaN(value) && !isEmpty(value)) {
        return callback(new Error('请输入数字'))
    }
    // let reg = /^[0-9]\d*(\.\d{1,2})?$|^0+(\.\d{1,2})?$/
    let reg = /^[-+]?(?:[0-9]|[1-9]\d*)(?:\.\d{1,2})?$/
    if (!reg.test(value) && !isEmpty(value)) {
        return callback(new Error('金额最多保留2位小数'))
    }
    if (value > limitMax) {
        return callback(new Error('不能小于等于' + limitMax))
    }
    callback()
}


/**
 * 校验手机号
 * required: 是否必填, 默认false
 */
const validateMobile = (rule, value, callback) => {
    let required = typeof rule.required !== 'undefined' ? rule.required : false
    const reg = new RegExp(/^1[3-9]\d{9}$/)
    if (required) {
        if (isEmpty(value)) {
            return callback(new Error('请输入'))
        }
        if (!reg.test(value)) {
            return callback(new Error('请输入正确的手机号码'))
        }
        callback()
    } else {
        if (isEmpty(value)) {
            callback()
        } else {
            if (!reg.test(value)) {
                return callback(new Error('请输入正确的手机号码'))
            }
            callback()
        }
    }
}

/**
 * 电话校验
 * 只能输入数字或“-”且长度不能超过12位
 * required: 是否必填, 默认false
 */
const validateMobile1 = (rule, value, callback) => {
    let required = typeof rule.required !== 'undefined' ? rule.required : false
    const reg = new RegExp(/^[\d-]{1,12}$/)
    if (required) {
        if (isEmpty(value)) {
            return callback(new Error('请输入'))
        }
        if (!reg.test(value)) {
            return callback(new Error('请输入正确的手机号码'))
        }
        callback()
    } else {
        if (isEmpty(value)) {
            callback()
        } else {
            if (!reg.test(value)) {
                return callback(new Error('请输入正确的手机号码'))
            }
            callback()
        }
    }
}

let rules = {
    select: [
        { required: true, message: '请选择', trigger: 'change' }
    ],
    amount: [
        { required: true, validator: validateAmount, trigger: 'change' }
    ],
    mobile: [{ required: true, validator: validateMobile1, trigger: 'change', max: 15 }],
    name: [{ required: true, validator: validString, trigger: 'change', max: 15 }],
}
export default rules